package com.java.base.exercise.jvm;

/**
 * @Author RenPu
 * @Date 2021/10/9 18:22
 * @Version 1.0
 * @Description: 虚拟栈和本地方法栈溢出
 * 对于hotspot -Xoss参数设置方法栈大小存在，但是实际上是无效的，
 * 栈容量只由-Xss参数设定
 * VM Args：参数 ：-Xss128k  设置方法栈大小
 * <p>
 * StackOverflowError：线程请求的栈深度，大于JVM允许的最大深度会出现此异常
 * OutOfMemoryError：  JVM在申请扩容时，无法申请到足够的内存会出现此异常
 */

public class StackOOM {

    private int stackLength = 1;

    public void stackLeak() {
        stackLength++;
        stackLeak();  //递归调用，栈深度的调用等同于递归的次数
    }

    public static void main(String[] args) {
        StackOOM oom = new StackOOM();
        try {
            oom.stackLeak();
        } catch (Throwable e) {
            System.out.println("stack length:" + oom.stackLength);
            throw e;
        }
    }


}
